package tulingxueyuan117;

import java.util.HashMap;
import java.util.HashSet;

/**
 * Author: Zhang Dongwei
 * Date: 2022/11/24 20:15
 * 给你一个 非空 整数数组 nums ，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
 *
 * 你必须设计并实现线性时间复杂度的算法来解决此问题，且该算法只使用常量额外空间。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/single-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class p49_只出现一次的数_136 {
    public static void main(String[] args) {
        int[] nums = {4, 1, 2, 1, 2};
        int res = singleNumber(nums);
        System.out.println(res);
    }

//    使用集合
//    public static int singleNumber(int[] nums) {
//        HashSet<Integer> set = new HashSet<>();
//        int res = 0;
//        for (int i=0; i<nums.length; i++){
//            if(!set.contains(nums[i])){
//                set.add(nums[i]);
//            }
//            else set.remove(nums[i]);
//        }
//        for (Integer num : set){
//            res = num;
//        }
//        return res;
//    }

//    异或
    public static int singleNumber(int[] nums) {
        int res = 0;
        for (int i = 0; i < nums.length; i++){
            res = res ^ nums[i];
        }
        return res;
    }
}
